# 多页数据爬取
"""
可以自动进行 翻页
"""
from scrapy import Request
from scrapy.spiders import Spider


# 起点中文网热销帮 爬取

class HotSalesSpider(Spider):
    # 定义爬虫名称
    name = "hot03"
    # 起始url列表   起点中文热销帮的地址
    start_urls = "https://www.qidian.com/rank/hotsales/page1"
    # 定义当前的起始页面
    cur_page = 1

    # 解析函数
    def start_requests(self):
        # 生成请求对象 设置url headers callback
        yield Request(self.start_urls)

    def parse(self, response, **kwargs):
        # 使用xpath 定位到 小说内容的div元素，保存到列表中
        list_selector = response.xpath("//div[@class='book-mid-info']")
        # 依次读取每部小说的元素，从中获取名称、作者、类型和形式
        for one_selector in list_selector:
            # 获取小说名称
            name = one_selector.xpath("h2/a/text()").extract()[0]
            # 获取小说作者
            author = one_selector.xpath("p[1]/a[1]/text()").extract()[0]
            # 获取类型
            type = one_selector.xpath("p[1]/a[2]/text()").extract()[0]
            # 获取形式 (连载/完本)
            form = one_selector.xpath("p[1]/span/text()").extract()[0]

            # 将爬取到的一部分小说保存到字典中
            hot_dict = {"name": name,
                        "author": author,
                        "type": type,
                        "form": form}
            # 使用yield返回字典
            yield hot_dict
        self.cur_page = self.cur_page + 1
        if self.cur_page <= 5:
            next_url = "https://www.qidian.com/rank/hotsales/page{}".format(self.cur_page)
            yield Request(next_url)

# TODO 使用 scrapy crawl hot -o hot.csv  命令保存数据卫 hot.csv
